package testes.controladoras;

import static org.junit.Assert.*;
import java.util.*;
import model.*;
import org.junit.*;
import controller.*;

public class TestControladoraDevolucao {
	ControladoraLocadora controladoraLocadora = new ControladoraLocadora();
	ControladoraLocacao controladoraLocacao = new ControladoraLocacao();
	ControladoraDevolucao controladoraDevolucao = new ControladoraDevolucao();
	ArrayList<Integer> filmes = new ArrayList<Integer>();
	Locadora locadora = new Locadora();
	Aluguel aluguel;
	Video v, v1, v2, v3;
	Cliente cliente;
	Calendar c = Calendar.getInstance();
	
	@Before
	public void setUp(){
		c.add(Calendar.DATE, 3);
		cliente = controladoraLocadora.cadastrarCliente(locadora, new Cliente("Kamilla", 234, "Rua azul", 789, 908, new CartaoAVS(123), 0.0));
		v1 = controladoraLocadora.cadastrarVideo(locadora, new Video(1, 4, "Um corpo que cai", "1958", "Drama", 2));
		v2 = controladoraLocadora.cadastrarVideo(locadora, new Video(3, 1, "Cinema Paradiso", "1988", "Comédia", 3));
		v3 = controladoraLocadora.cadastrarVideo(locadora, new Video(2, 3, "Casablanca", "1942", "Drama", 1));
		
		Iterator<Video> it = locadora.getVideo().iterator();
		while(it.hasNext()){
			v = (Video) it.next();
			filmes.add(v.getNumeroCatalogo());
		}
		
		controladoraLocacao.realizarLocacao(locadora, filmes, cliente.getNumeroCartaoAVS().getIdentificador());

	}
	

	@Test
	public void testRealizarDevolucao() {
		cliente.setValorDevido(cliente.getValorDevido()+10);
		controladoraDevolucao.realizarDevolucao(locadora, 123);
		assertTrue(locadora.getAluguel().isEmpty());
		
		Iterator<Aluguel> it = locadora.getAluguel().iterator();
		while(it.hasNext()){
			aluguel = (Aluguel) it.next();
			if(aluguel.getNumeroCartaoAVS() == cliente.getNumeroCartaoAVS().getIdentificador()){
				assertEquals(cliente.getValorDevido(), cliente.getValorDevido()-aluguel.getValorLocacao(), 0);
			}
		}
		
		assertEquals(2, v1.getQuantidade());
		assertEquals(3, v2.getQuantidade());
		assertEquals(1, v3.getQuantidade());
		
	}

	@Test
	public void testVerificarPendencia(){
		assertEquals(false, controladoraDevolucao.verificarPendenciaCliente(locadora, 123));
		controladoraDevolucao.realizarDevolucao(locadora, 123);
		cliente.setValorDevido(0);
		assertEquals(true, controladoraDevolucao.verificarPendenciaCliente(locadora, 123));
	}
	
	@Test
	public void testCalcularMulta(){
		assertEquals(0, controladoraDevolucao.calcularMulta(locadora, 123, c), 0);
		c.add(Calendar.DATE, 3);
		assertEquals(5.0, controladoraDevolucao.calcularMulta(locadora, 123, c), 0);
		
	}
}
